#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SQLite数据查看工具
用于查看MediaCrawler爬取的数据
"""

import sqlite3
import pandas as pd
import os

# 数据库文件路径
DB_PATH = "schema/sqlite_tables.db"

def check_db_exists():
    """检查数据库文件是否存在"""
    if not os.path.exists(DB_PATH):
        print(f"❌ 数据库文件不存在: {DB_PATH}")
        return False
    print(f"✅ 数据库文件存在: {DB_PATH}")
    return True

def get_all_tables():
    """获取所有表名"""
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
    tables = cursor.fetchall()
    conn.close()
    return [table[0] for table in tables]

def show_table_info(table_name):
    """显示表的基本信息"""
    conn = sqlite3.connect(DB_PATH)
    
    # 获取表结构
    cursor = conn.cursor()
    cursor.execute(f"PRAGMA table_info({table_name});")
    columns = cursor.fetchall()
    
    # 获取记录数
    cursor.execute(f"SELECT COUNT(*) FROM {table_name};")
    count = cursor.fetchone()[0]
    
    print(f"\n📊 表名: {table_name}")
    print(f"📈 记录数: {count}")
    print("📋 字段结构:")
    for col in columns:
        print(f"  - {col[1]} ({col[2]})")
    
    conn.close()
    return count

def view_table_data(table_name, limit=10):
    """查看表数据"""
    conn = sqlite3.connect(DB_PATH)
    
    try:
        # 使用pandas读取数据，更好的显示效果
        df = pd.read_sql_query(f"SELECT * FROM {table_name} LIMIT {limit}", conn)
        
        if len(df) > 0:
            print(f"\n📄 {table_name} 前{limit}条数据:")
            print("="*80)
            print(df.to_string(index=False, max_colwidth=50))
        else:
            print(f"\n📄 {table_name} 暂无数据")
            
    except Exception as e:
        print(f"❌ 读取数据失败: {e}")
    finally:
        conn.close()

def main():
    """主函数"""
    print("🔍 MediaCrawler SQLite 数据查看工具")
    print("="*50)
    
    # 检查数据库文件
    if not check_db_exists():
        return
    
    # 获取所有表
    tables = get_all_tables()
    if not tables:
        print("❌ 数据库中没有找到任何表")
        return
    
    print(f"\n📋 发现 {len(tables)} 个数据表:")
    for i, table in enumerate(tables, 1):
        print(f"  {i}. {table}")
    
    # 显示每个表的信息和数据
    for table in tables:
        count = show_table_info(table)
        if count > 0:
            view_table_data(table, limit=5)
    
    print("\n" + "="*50)
    print("💡 提示:")
    print("1. 使用 DB Browser for SQLite 可以更方便地查看和编辑数据")
    print("2. 下载地址: https://sqlitebrowser.org/")
    print("3. 数据文件位置:", os.path.abspath(DB_PATH))

if __name__ == "__main__":
    main()